package utils

import (
	"fmt"
	"os"
	"path/filepath"

	"github.com/spf13/viper"
)

// Config 配置结构
type Config struct {
	Database DatabaseConfig
}

// DatabaseConfig 数据库配置
type DatabaseConfig struct {
	Host      string
	Port      int
	Username  string
	Password  string
	DBName    string
	Charset   string
	ParseTime bool
	Loc       string
}

var config *Config

// GetConfig 获取配置
func GetConfig() *Config {
	if config == nil {
		config = &Config{}
		loadConfig()
	}
	return config
}

// loadConfig 加载配置
func loadConfig() error {
	// 获取当前工作目录
	workDir, err := os.Getwd()
	if err != nil {
		return fmt.Errorf("获取工作目录失败: %v", err)
	}

	// 查找配置文件
	configDir := filepath.Join(workDir, "config")
	if _, err := os.Stat(configDir); os.IsNotExist(err) {
		return fmt.Errorf("配置目录不存在: %s", configDir)
	}

	// 设置配置文件路径
	viper.SetConfigName("config")
	viper.SetConfigType("yaml")
	viper.AddConfigPath(configDir)

	// 读取配置文件
	if err := viper.ReadInConfig(); err != nil {
		return fmt.Errorf("读取配置文件失败: %v", err)
	}

	// 解析数据库配置
	if err := viper.UnmarshalKey("database", &config.Database); err != nil {
		return fmt.Errorf("解析数据库配置失败: %v", err)
	}

	return nil
}
